Werte per RFC importieren
Hier zeigen wir Ihnen, wie Sie mithilfe eines Excel-Makros auf ein R/3-System zugreifen und das Ergebnis in Excel speichern können. Der Zugriff erfolgt durch einen “Remote Function Call”. Verwendete Funktionsbausteine müssen RFC-fähig sein.
Legen Sie folgende Makros an und führen Sie das Makro “Start” aus. Die Tabelle T001 “Buchungskreise” wird dann aus dem angegebenen System gelesen und in Excel ausgegeben.
In diesem Fall wird der Funktionsbaustein RFC_READ_TABLE verwendet, um eine Datenbanktabelle auszulesen.
In den Kommentaren stehen noch hilfreiche Hinweise.
SAP-Doku “Using OCX Controls – Chapter 2”
Hier gibt es die Excel-Datei (Format “XLSM”).
Danke an tron! 😉
‘***********************************
‘ Allgemeine SAP Objekte
‘***********************************
Public oConSMD As Object
Public FuncSMD As Object
Public oLogSMD As Object
Public SMDFunctions As Object
‘***********************************
‘ Objekte für RFC_READ_TABLE
‘***********************************
Public SMDFunc As Object
Public SMDTabObj As Object
Public LOGSSMD As Integer
Public SMDdata() As String
Public Sub Logon()
Rem *** Create the Logon Control
Set oLogSMD = CreateObject(“SAP.Logoncontrol.1”)
Rem *** Get a connection object
Set oConSMD = oLogSMD.NewConnection
Rem *** Either all parameters are set by the design environment
Rem *** (except the password) or they are hardcoded,as in the following
Rem *** lines. The following lines depend on your R/3 environment
Rem *** These are the system parameters
oConSMD.System = “DEV” ‘Name of your R/3 System
oConSMD.ApplicationServer = “sldevt10” ‘ApplicationServer of your R/3 System
oConSMD.SystemNumber = 0 ‘SystemNumber of your R/3 System
Rem ***User specific data
oConSMD.User = “TRICKTRESOR”
oConSMD.Password = “Trick17”
oConSMD.Client = “100”
oConSMD.Language = “DE”
Rem ***Try to connect to the R/3 System
If oConSMD.Logon(0, True) = False Then
MsgBox “R/3 connection failed”
LOGSSMD = 0
Exit Sub
End If
LOGSSMD = 1
Set SMDFunctions = CreateObject(“SAP.Functions”)
‘Log on to the R/3 System.
Set SMDFunctions.Connection = oConSMD
Set SMDFunc = SMDFunctions.Add(“RFC_READ_TABLE”)
End Sub
Public Sub LogoffSMD()
If LOGSSMD = 1 Then oConSMD. Logoff
End Sub
Sub SMDRead_Table(Table As String)
Dim T() As String
Dim i As Long
Dim k As Long
SMDFunc.Exports(“DELIMITER”) = vbTab
‘SMDFunc.Exports(“NO_DATA”) = “X”
SMDFunc.Exports(“QUERY_TABLE”) = Table
‘SMDFunc.Exports(“ROWCOUNT”) = “500”
‘******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables(“FIELDS”)
SMDTabObj.freetable
‘SMDTabObj.appendrow
‘SMDTabObj.appendrow
‘SMDTabObj.cell(1, 1) = “CHECKTABLE”
‘SMDTabObj.cell(2, 1) = “KEYFLAG”
‘******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables(“OPTIONS”)
SMDTabObj.freetable
‘SMDTabObj.appendrow
‘SMDTabObj.cell(1, 1) = “TABNAME EQ ‘” & Tab_Nam & “‘ AND LENG NE 0”
‘******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables(“DATA”)
‘******** CLear Table ************
SMDTabObj.freetable
If SMDFunc.Call = True Then
‘******** Read Result ************
T = Split(SMDTabObj.cell(1, 1), vbTab)
ReDim SMDdata(SMDTabObj.Rows.Count, UBound(T))
k = 0
For Each element In SMDTabObj.Rows
T = Split(element(“WA”), vbTab)
For i = 0 To UBound(T)
SMDdata(k, UBound(T) – i) = T(i)
Next i
k = k + 1
Next element
Else
MsgBox SMDFunc.Exception
End If
‘*** ohne Mandant
ReDim Preserve SMDdata(SMDTabObj.Rows.Count, UBound(T) – 1)
End Sub
Sub Start()
Dim i As Long
Dim k As Long
Sheets(1).Select
Logon
SMDRead_Table (“T001”)
For i = 0 To UBound(SMDdata, 1)
For k = 0 To UBound(SMDdata, 2)
Cells(i + 1, UBound(SMDdata, 2) – k + 1).Value = SMDdata(i, k)
Next k, i
LogoffSMD
End Sub
Verbesserungsvorschläge
1.) Die Methoden Logon und LogoffSMD auf von “Public” auf “Private” setzen – dann tauchen Sie nicht in der Makroliste auf
2.) Die Kennworteingabe ist ja immer problematisch. Ersetzen Sie die die folgende Zeile
If oConSMD.Logon(0, True) = False Then
durch
If oConSMD.Logon(0, False) = False Then
Dann kommt ein Popup angehüpft, in welchem man die Logondaten (User, Kennwort, System, Mandant, … – alles vorbelegbar aus dem VBA heraus) eingeben kann.
3.) Wenn der Logon fehlschlägt wird zwar eine MsgBox gesendet – aber es wird trotzdem versucht die Daten zu lesen und dabei kommte es dann zu einem Dump. Es sollte noch getestet werden ob das Objekt überhaupt angelegt werden konnte.
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024